home *** CD-ROM | disk | FTP | other *** search
-
-
-
- RRRROOOOUUUUTTTTEEEE((((7777PPPP)))) RRRROOOOUUUUTTTTEEEE((((7777PPPP))))
-
-
-
- NNNNAAAAMMMMEEEE
- route - kernel packet forwarding database
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ####iiiinnnncccclllluuuuddddeeee <<<<ssssyyyyssss////ssssoooocccckkkkeeeetttt....hhhh>>>>
- ####iiiinnnncccclllluuuuddddeeee <<<<nnnneeeetttt////iiiiffff....hhhh>>>>
- ####iiiinnnncccclllluuuuddddeeee <<<<nnnneeeetttt////rrrroooouuuutttteeee....hhhh>>>>
- iiiinnnntttt ssssoooocccckkkkeeeetttt((((PPPPFFFF____RRRROOOOUUUUTTTTEEEE,,,, SSSSOOOOCCCCKKKK____RRRRAAAAWWWW,,,, ffffaaaammmmiiiillllyyyy))));;;;
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The system provides some packet routing facilities. The kernel maintains
- a routing information database, which is used in selecting the
- appropriate network interface when transmitting packets.
-
- A user process (or possibly multiple co-operating processes) maintains
- this database by sending messages over a special kind of socket. This
- supplants fixed size _i_o_c_t_l(2)'s used in earlier releases. Routing table
- changes may only be carried out by the super user.
-
- The operating system may spontaneously emit routing messages in response
- to external events, such as receipt of a re-direct, or failure to locate
- a suitable route for a request. The message types are described in
- greater detail below.
-
- Routing database entries come in two flavors: for a specific host, or for
- all hosts on a generic subnetwork (as specified by a bit mask and value
- under the mask. The effect of wildcard or default route may be achieved
- by using a mask of all zeros, and there may be hierarchical routes.
-
- When the system is booted and addresses are assigned to the network
- interfaces, each protocol family installs a routing table entry for each
- interface when it is ready for traffic. Normally the protocol specifies
- the route through each interface as a ``direct'' connection to the
- destination host or network. If the route is direct, the transport layer
- of a protocol family usually requests the packet be sent to the same host
- specified in the packet. Otherwise, the interface is requested to
- address the packet to the gateway listed in the routing entry ( _i._e. the
- packet is forwarded).
-
- When routing a packet, the kernel will attempt to find the most specific
- route matching the destination. (If there are two different mask and
- value-under-the-mask pairs that match, the more specific is the one with
- more bits in the mask. A route to a host is regarded as being supplied
- with a mask of as many ones as there are bits in the destination). If no
- entry is found, the destination is declared to be unreachable, and a
- routing-miss message is generated if there are any listers on the routing
- control socket described below.
-
- A wildcard routing entry is specified with a zero destination address
- value, and a mask of all zeroes. Wildcard routes will be used when the
- system fails to find other routes matching the destination. The
- combination of wildcard routes and routing redirects can provide an
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- RRRROOOOUUUUTTTTEEEE((((7777PPPP)))) RRRROOOOUUUUTTTTEEEE((((7777PPPP))))
-
-
-
- economical mechanism for routing traffic.
-
- One opens the channel for passing routing control messages by using the
- socket call shown in the synopsis above:
-
- The _f_a_m_i_l_y parameter may be _A_F__U_N_S_P_E_C which will provide routing
- information for all address families, or can be restricted to a specific
- address family by specifying which one is desired. There can be more
- than one routing socket open per system.
-
- Messages are formed by a header followed by a small number of sockaddrs
- interpreted by position. An example of a message with three addresses
- might be a redirect: Destination, Gateway, and Author of the redirect.
- The interpretation of which addresses are present is given by a bit mask
- within the header, and the sequence is least significant to most
- significant bit within the vector.
-
- Any messages sent to the kernel are returned, and copies are sent to all
- interested listeners. The kernel will provide the process id. for the
- sender, and the sender may use an additional sequence field to
- distinguish between outstanding messages. However, message replies may
- be lost when kernel buffers are exhausted.
-
- The kernel may reject certain messages, and will indicate this by filling
- in the _r_t_m__e_r_r_n_o field. The routing code returns _E_E_X_I_S_T if requested to
- duplicate an existing entry, _E_S_R_C_H if requested to delete a non-existent
- entry, or _E_N_O_B_U_F_S if insufficient resources were available to install a
- new route. In the current implementation, all routing processes run
- locally, and the values for _r_t_m__e_r_r_n_o are available through the normal
- _e_r_r_n_o mechanism, even if the routing reply message is lost.
-
- A process may avoid the expense of reading replies to its own messages by
- issuing a _s_e_t_s_o_c_k_o_p_t(2) call indicating that the _S_O__U_S_E_L_O_O_P_B_A_C_K option at
- the _S_O_L__S_O_C_K_E_T level is to be turned off. A process may ignore all
- messages from the routing socket by doing a _s_h_u_t_d_o_w_n(2) system call for
- further input.
-
- If a route is in use when it is deleted, the routing entry will be marked
- down and removed from the routing table, but the resources associated
- with it will not be reclaimed until all references to it are released.
- User processes can obtain information about the routing entry to a
- specific destination by using a _R_T_M__G_E_T message, or by reading the
- /_d_e_v/_k_m_e_m device.
-
- Messages include:
-
- #define RTM_ADD 0x1 /* Add Route */
- #define RTM_DELETE 0x2 /* Delete Route */
- #define RTM_CHANGE 0x3 /* Change Metrics, Flags, or Gateway */
- #define RTM_GET 0x4 /* Report Information */
- #define RTM_LOOSING 0x5 /* Kernel Suspects Partitioning */
- #define RTM_REDIRECT 0x6 /* Told to use different route */
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- RRRROOOOUUUUTTTTEEEE((((7777PPPP)))) RRRROOOOUUUUTTTTEEEE((((7777PPPP))))
-
-
-
- #define RTM_MISS 0x7 /* Lookup failed on this address */
- #define RTM_RESOLVE 0xb /* request to resolve dst to LL addr */
-
-
- A message header consists of:
-
- struct rt_msghdr {
- u_short rmt_msglen; /* to skip over non-understood messages */
- u_char rtm_version; /* future binary compatibility */
- u_char rtm_type; /* message type */
- u_short rmt_index; /* index for associated ifp */
- pid_t rmt_pid; /* identify sender */
- __uint32_t rtm_addrs; /* bitmask identifying sockaddrs in msg */
- int rtm_seq; /* for sender to identify action */
- int rtm_errno; /* why failed */
- int rtm_flags; /* flags, incl kern & message, e.g. DONE */
- int rtm_use; /* from rtentry */
- u_long rtm_inits; /* which values we are initializing */
- struct rt_metrics rtm_rmx; /* metrics themselves */
- };
-
-
- where
-
- struct rt_metrics {
- u_long rmx_locks; /* Kernel must leave these values alone */
- u_long rmx_mtu; /* MTU for this path */
- u_long rmx_hopcount; /* max hops expected */
- u_long rmx_expire; /* lifetime for route, e.g. redirect */
- u_long rmx_recvpipe; /* inbound delay-bandwidth product */
- u_long rmx_sendpipe; /* outbound delay-bandwidth product */
- u_long rmx_ssthresh; /* outbound gateway buffer limit */
- u_long rmx_rtt; /* estimated round trip time */
- u_long rmx_rttvar; /* estimated rtt variance */
- };
-
-
- Flags include the values:
-
- #define RTF_UP 0x1 /* route usable */
- #define RTF_GATEWAY 0x2 /* destination is a gateway */
- #define RTF_HOST 0x4 /* host entry (net otherwise) */
- #define RTF_REJECT 0x8 /* host or net unreachable */
- #define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */
- #define RTF_MODIFIED 0x20 /* modified dynamically (by redirect) */
- #define RTF_DONE 0x40 /* message confirmed */
- #define RTF_MASK 0x80 /* subnet mask present */
- #define RTF_CLONING 0x100 /* generate new routes on use */
- #define RTF_XRESOLVE 0x200 /* external daemon resolves name */
- #define RTF_LLINFO 0x400 /* generated by ARP or ESIS */
- #define RTF_STATIC 0x800 /* manually added */
- #define RTF_BLACKHOLE 0x1000 /* just discard pkts (during updates) */
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-
-
-
- RRRROOOOUUUUTTTTEEEE((((7777PPPP)))) RRRROOOOUUUUTTTTEEEE((((7777PPPP))))
-
-
-
- #define RTF_PROTO2 0x4000 /* protocol specific routing flag #1 */
- #define RTF_PROTO1 0x8000 /* protocol specific routing flag #2 */
- #define RTF_CKSUM 0x10000 /* TCP/UDP checksumming done on this route */
-
-
- Specifiers for metric values in rmx_locks and rtm_inits are:
-
- #define RTV_SSTHRESH 0x1 /* init or lock _ssthresh */
- #define RTV_RPIPE 0x2 /* init or lock _recvpipe */
- #define RTV_SPIPE 0x4 /* init or lock _sendpipe */
- #define RTV_HOPCOUNT 0x8 /* init or lock _hopcount */
- #define RTV_RTT 0x10 /* init or lock _rtt */
- #define RTV_RTTVAR 0x20 /* init or lock _rttvar */
- #define RTV_MTU 0x40 /* init or lock _mtu */
-
-
- Specifiers for which addresses are present in the messages are:
-
- #define RTA_DST 0x1 /* destination sockaddr present */
- #define RTA_GATEWAY 0x2 /* gateway sockaddr present */
- #define RTA_NETMASK 0x4 /* netmask sockaddr present */
- #define RTA_GENMASK 0x8 /* cloning mask sockaddr present */
- #define RTA_IFP 0x10 /* interface name sockaddr present */
- #define RTA_IFA 0x20 /* interface addr sockaddr present */
- #define RTA_AUTHOR 0x40 /* sockaddr for author of redirect */
-
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- ip(7p), netintro(7p)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 4444
-
-
-
-